#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//
////#include<vector>
////#include<iostream>
////#include<algorithm>
////using namespace std;
////vector<int> cnt[100005];
////int main()
////{
////	int n; cin >> n;
////	vector<int>arr(n);
////	for (int i = 0; i < n; i++) cin >> arr[i];
////	sort(arr.begin(), arr.end());
////	for (int i = 0; i < n; i++)
////	{
////		for (int j = 1; j <= arr[i] / j; j++)
////		{
////			if (arr[i] % j == 0)
////			{
////				cnt[j].push_back(arr[i]);
////				if (arr[i] / j != j)
////				{
////					cnt[arr[i] / j].push_back(arr[i]);
////				}
////			}
////			
////		}
////	}
////	for (int i = 100000; i >= 1; i--)
////	{
////		if (cnt[i].size() >= 3)
////		{
////			for (int j = 0; j < 3; j++)
////			{
////				cout << cnt[i][j] << " ";
////			}
////			break;
////		}
////	}
////	return 0;
////}
//vector<int> dp[100005];
//vector<int> cnt[100005];
//int main()
//{
//	int n;
//	cin >> n;
//	vector<int> arr(n);
//	for (int i = 0; i < n; i++)
//	{
//		cin >> arr[i];
//	}
//	sort(arr.begin(), arr.end());
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 1; j <= arr[i] / j; j++)
//		{
//			if (arr[i] % j == 0)
//			{
//				dp[arr[i]].push_back(j);
//				if (arr[i] / j != j)
//				{
//					dp[arr[i]].push_back(arr[i] / j);
//				}
//			}
//		}
//	}
//
//	for (int i = 0; i < n; i++)
//	{
//		for (auto& ch : dp[arr[i]])
//		{
//			cnt[ch].push_back(arr[i]);
//		}
//	}
//	for (int max = arr[n - 1]; max >= 1; max--)
//	{
//		if (cnt[max].size() >= 3)
//		{
//			for (int i = 0; i < 3; i++)
//			{
//				cout << cnt[max][i] << " ";
//			}
//			break;
//		}
//	}
//	return 0;
//}

//#define _CRT_SECURE_NO_WARNINGS
//#include<iostream>
//#include<vector>
//#include<algorithm>
//using namespace std;

//#include<vector>
//#include<iostream>
//#include<algorithm>
//using namespace std;
//vector<int> cnt[100005];
//int main()
//{
//	int n; cin >> n;
//	vector<int>arr(n);
//	for (int i = 0; i < n; i++) cin >> arr[i];
//	sort(arr.begin(), arr.end());
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 1; j <= arr[i] / j; j++)
//		{
//			if (arr[i] % j == 0)
//			{
//				cnt[j].push_back(arr[i]);
//				if (arr[i] / j != j)
//				{
//					cnt[arr[i] / j].push_back(arr[i]);
//				}
//			}
//			
//		}
//	}
//	for (int i = 100000; i >= 1; i--)
//	{
//		if (cnt[i].size() >= 3)
//		{
//			for (int j = 0; j < 3; j++)
//			{
//				cout << cnt[i][j] << " ";
//			}
//			break;
//		}
//	}
//	return 0;
//}
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> arr;
vector<int>dp[100005];
vector<int>cnt [100005] ;
int main()
{
	for (int i = 1; i <= 100000; i++)
	{
		for (int j = 1; j <= i / j; j++)
		{
			if (i % j == 0)
			{
				dp[i].push_back(j);
				if (i / j != j) dp[i].push_back(i / j);
			}
		}
	}
	
	int n; cin >> n;
	arr.resize(n);
	for (int i = 0; i < n; i++) cin >> arr[i];
	sort(arr.begin(), arr.end());
	for (int i = 0; i < n; i++)
	{	
		for (int j = 0; j < dp[arr[i]].size(); j++)
		{
			int yue = dp[arr[i]][j];
			cnt[yue].push_back(arr[i]);
		}
	}
	for (int i = arr[n-1]; i >= 1; i--)
	{
		if (cnt[i].size() >= 3)
		{
			for (int j = 0; j < 3; j++)
			{
				cout << cnt[i][j] << " ";
			}
			break;
		}
	}
	return 0;
}